Skip to content

release: SAML デコーダ本番リリース(develop → main) - #756

Merged
fumtas1k merged 11 commits into
mainfrom
develop
Jul 20, 2026
Merged

release: SAML デコーダ本番リリース(develop → main)#756
fumtas1k merged 11 commits into
mainfrom
develop

Conversation

@fumtas1k

Copy link
Copy Markdown
Owner

リリース概要

develop に積み上がった 11 コミットを main へリリースします。目玉は SAML デコーダの本番投入です。

主な変更

新機能

テスト / ドキュメント / 雑務

SAML デコーダの本番リリース判断(issue #745

  • コア機能(各メッセージ型のデコード・整形表示)は完成。
  • セキュリティ対処(deflate bomb 上限 32MB)・レビュー Critical/Important はすべて対応済み。
  • 未実装の XMLDSig 署名検証・EncryptedAssertion 復号は明示的にスコープ外とした第2版機能で、UI 上で「検証しません/改ざん有無は保証しません」と告知済み。issue SAMLデコーダ第2版: 署名検証・復号・他メッセージ型・レビュー残余改善 #745 は第2版追跡用にオープン継続。

マージ方法

release-only branch policy に従い merge commit--merge)でマージします(develop の squash コミット群をそのまま main に引き継ぐため)。

fumtas1k and others added 11 commits June 28, 2026 17:46
chore: main の変更を develop へ同期
PR マージ後の振り返りを構造化する手動起動スキル retro(第1弾 MVP)を追加。

- スキル本体 `.agents/skills/retro/SKILL.md`(5 ステップ手順・5 分類テーブル・停止ゲート)
- Claude Code discovery 用 symlink `.claude/skills/retro`(mode 120000、test-gates と同形式)
- 自作スキル出典表(`.agents/skills/README.md`)に retro を追記
- 設計 / 実装計画を docs/superpowers/ に記録

自動リマインド(PostToolUse フック)は留保 1〜3 を踏まえ YAGNI で第1弾は見送り、手動運用で確認後に別 PR で検討。

レビュー対応: `.claude/settings.json` の `defaultMode: auto` は project 設定では無視される dead config のため revert。`model: opus[1m]` の変更のみ同梱。
権限チェックは Edit(path) ルールでのみ照合され Write(path) は無視される
(Edit ルールが Write ツールも含めてカバーする)。allow/ask にあった
Write(...) は同一パスの Edit(...) と重複していたため削除(実効権限は不変)。
併せて permissions.defaultMode を default から auto に変更。deny リストは
auto でも常にブロックされるため破壊的操作の歯止めは維持される。

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: SAMLデコーダ(saml-decoder)の設計ドキュメントを追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* style: SAMLデコーダ設計ドキュメントの表を整形

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: SAMLデコーダの実装計画を追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* build: SAMLデコーダ用に fflate を追加

* feat: SAML 入力の自動判定デコードチェーンを追加

* feat: SAML Response / AuthnRequest の構造化パーサを追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: SAML Response の定番チェックリストを追加(陽性対照テスト付き)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: 実装計画の陽性対照ケース数の誤記を修正

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: SAML 生 XML の表示用整形を追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix: SAMLデコーダの日付検証・URL パラメータ抽出のレビュー指摘を修正

パース不能な日付が success 判定になる不具合、タイムゾーン指定なし日時が
端末依存で判定される問題、URL クエリ中の生 "+" が base64 を破壊する問題、
namespace 違いのエラーメッセージの自己矛盾を修正し、URL デコード後の生 XML
救済を追加。各修正に陽性対照テストを併設。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: SAMLデコーダの UI コンポーネントを追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: SAMLデコーダのページ・ツール登録・VRT 対象を追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* test: SAMLデコーダの E2E テストを追加(陽性対照含む)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012d2MLvAK8ErqKqzMYv5HUM

* test: SAMLデコーダ E2E の hydration 待機を正典 helper に統一

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012d2MLvAK8ErqKqzMYv5HUM

* docs: SAMLデコーダのドキュメントを更新

README/SPEC/docs/tools.md/docs/decisions.md に SAMLデコーダ(saml-decoder)
のツール一覧・技術解説・fflate 採用理由([124])を追記する。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012d2MLvAK8ErqKqzMYv5HUM

* style: 既存ファイルのPrettier整形差分を解消

Task 9 の npm run format 実行時に検出された、既存コミットの未整形差分
(tests/e2e/saml-decoder.spec.ts / 実装計画ドキュメント内コードブロック)
を解消する。機能変更なし。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012d2MLvAK8ErqKqzMYv5HUM

* feat: SAMLデコーダのツールアイコンを追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: SPEC のツール総数の誤記修正と AuthnRequest 抽出項目の列挙漏れを補完

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix: SAMLデコーダのレビュー指摘対応(live region 縮小・改行描画・key 重複・クエリ断片入力)

PR #746 のレビュー指摘 4 件に対応:
- a11y: role/aria-live を結果全体の巨大 div から外し、デコード過程を示す
  <p> のみ role="status" にして簡潔なアナウンスに限定
- チェックリストの detail に whitespace-pre-line を追加し、tzNote の
  改行(\n)が実際に改行として描画されるよう修正
- 属性テーブル・Assertion セクションの React key を index ベースの
  合成キーに変更し、同一 Name の Attribute や ID 重複入力での
  key 衝突を回避
- クエリ文字列断片(SAMLResponse=...&RelayState=... 等)だけの入力を
  救済する分岐を追加し、extractSamlParam に共通化

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012d2MLvAK8ErqKqzMYv5HUM

* test(vrt): visual regression baseline を CI Linux runner で再生成

* docs: ツール候補リストの S2-2 に実装済みステータスを記載

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…box) (#748)

* docs: PR #746 の振り返りを規約へ反映(アイコン手順・VRT rebase・live region・Playwright sandbox)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore: ルート tmp/ を gitignore に追加(sandbox の Playwright キャッシュ置き場)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: レビュー提案を反映(gitignore をルート限定・Playwright 節の適用環境を明記)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
issue #745 のレビュー残余 8 項目を実装。base64url 入力の受容、ネスト StatusCode の内側コード表示、複数 AudienceRestriction の AND 意味論、簡易整形の UI 注記、回帰テスト追加(default xmlns / 複数 Assertion)、タイムゾーン判定の精度向上、percent エンコードキー照合、deflate 展開の 32MB 上限(zip bomb 対策・陽性対照付き)。

Refs #745

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* docs: issue #750 E2E hydration 待ち漏れ修正の設計仕様を追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017WJinoLkLbECJS5K74A5gr

* docs: issue #750 の実装計画を追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017WJinoLkLbECJS5K74A5gr

* test(e2e): dsn-builder spec に hydration 待ちを追加

* test(e2e): dummy-personal-data spec に hydration 待ちを追加

* test(e2e): har-viewer spec に hydration 待ちを追加

* test(meta): E2E spec の hydration 待ち漏れ検出 meta テストを追加

* style: 設計 spec / 実装計画の markdown を Prettier 整形

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017WJinoLkLbECJS5K74A5gr

* test: レビュー対応(meta テストの既知の限界を明記・Page 型表記を統一)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017WJinoLkLbECJS5K74A5gr

---------

Co-authored-by: Claude <noreply@anthropic.com>
…照の timeout) (#752)

PR #749 の振り返りで承認された 3 件を反映: loopback connect 全面 deny 環境での E2E 判断基準(git-and-fs.md)、React island へ入力する E2E spec の waitForReactHydration 必須化(ui-conventions.md 3.4 節新設)、重量フィクスチャの陽性対照テストの CI タイムアウト知見(agent-lessons.md)。

Refs #750

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* docs: SAMLデコーダ LogoutRequest/LogoutResponse 対応の設計 doc を追加

issue #745 の第2版候補のうち他メッセージ型対応(Logout 2 型)の設計。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

* docs: SAMLデコーダ Logout 2 型対応の実装計画を追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

* feat: SAMLデコーダのパーサを LogoutRequest/LogoutResponse に対応

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

* feat: LogoutRequest/LogoutResponse のチェックリストを追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

* feat: SAMLデコーダ UI に LogoutRequest/LogoutResponse サマリとチェックリストを追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

* test(e2e): LogoutRequest/LogoutResponse の表示と陽性対照を追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

* docs: SAMLデコーダの LogoutRequest/LogoutResponse 対応を技術解説に反映

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

* style: 設計 doc と実装計画 doc の prettier 整形崩れを修正

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

* refactor: レビュー指摘対応(BaseID 非対応を docs 明記・引数型を Pick で絞り込み)

PR #753 のレビュー軽微指摘のうち 2 件に対応。
- runLogoutRequestChecks の opts を Pick<CheckOptions, 'now'> に絞り、spEntityId が無関係なことを型で表現
- docs/tools.md に LogoutRequest の BaseID 非対応を明記

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* docs: push 前必須チェックに format:check を追加(PR #753 振り返り)

CI の test ジョブは format:check → lint → 型 → vitest の順で走るため、
ローカルの npm run test(vitest のみ)では整形崩れを検出できず CI が赤になる。
特に Write/Edit で作成した Markdown で整形漏れが起きやすい(PR #753 で実発生)。
正本 playbook のチェックリストと common.md 3 章の要約の両方に反映。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

* docs: 親 push 前チェックリストにも format:check を追加(PR #754 レビュー指摘)

pr-creation.md 3 章の親セッション用チェックリストは e2e-validation.md 2.2 から
誘導される第 3 の push 前チェックリスト。ここに format:check が抜けていると
親が直接 push する経路(PR #753 の事故経路)で整形崩れを防げないため追加。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

* style: pr-creation.md のテーブル整形を prettier に合わせる

前コミットでテーブル行を追加した際に列幅が変わり prettier 再整形が必要になった分。
今回の retro が防ごうとした format:check 漏れを PR 内で実演した形のため追記。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PQEExgat1Tt6BsnJzYnB2a

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* docs: SAMLデコーダ共有用マスク出力の設計を追加

issue #745 の機能候補「共有用マスク出力(secret-scrubber との連携)」の
設計をブレインストーミングで確定。構造ベースマスク+scrubber 併用方針。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KzXQvK6mSGKEtAHRki75Ds

* docs: SAML デコーダ共有用マスク出力の実装計画を追加

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KzXQvK6mSGKEtAHRki75Ds

* refactor: SAML 名前空間定数を ns.ts へ切り出し parse/mask で共有

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KzXQvK6mSGKEtAHRki75Ds

* feat: SAML デコーダに共有用マスク出力ロジックを追加

構造ベース(NameID/AttributeValue)+secret-scrubber 併用(HIGH_ENTROPY 除外)で
PII・機密を除去。値ベース一貫トークンで相関を保つ。陽性/陰性対照テスト付き。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KzXQvK6mSGKEtAHRki75Ds

* feat: SAML デコーダに 生 XML / マスク XML の表示トグルを追加

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KzXQvK6mSGKEtAHRki75Ds

* test: SAML デコーダのマスク XML トグルの E2E を追加

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KzXQvK6mSGKEtAHRki75Ds

* docs: SAML デコーダ共有用マスク出力の仕組み・決定を追記

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KzXQvK6mSGKEtAHRki75Ds

* test: LogoutRequest マスクの陽性対照を実在値で検証する

フィクスチャに存在しない taro@example.com での not.toContain は空振り
していたため、実在値 taro.yamada@example.com とトークン出現で検証する
真の陽性対照に修正(レビュー指摘・test-gates 準拠)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KzXQvK6mSGKEtAHRki75Ds

---------

Co-authored-by: Claude <noreply@anthropic.com>
@fumtas1k
fumtas1k enabled auto-merge July 20, 2026 14:14
@github-actions

Copy link
Copy Markdown
Contributor

🖼️ Visual Regression Test 結果

  • Status: ✅ 全 74 件 pass
  • Workflow run: 29749701583
  • Artifact (diff 画像 / playwright-report): 上記 workflow run の Artifacts セクションから download

diff が 意図的な visual 変更の場合: Update Visual Regression Baseline workflow を本 PR ブランチで workflow_dispatch trigger して baseline を更新。
diff が 意図しない regression の場合: 該当変更を fix。
本 check は required ではないため fail のままでも merge は可能(reviewer 判断)。

@fumtas1k
fumtas1k merged commit 855c7ae into main Jul 20, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant